﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.HtmlControls;
using Entidades.Models.Sistema;
using Web.Extensions;
using Web.Helpers;
using System.Web.Services;
using Controladores;
using Entidades;
using Entidades.Models;
using Newtonsoft.Json;
using Common;

namespace Web.Pages
{
    // TODO => GET / POST de esto tiene que estructurarse mejor
    public partial class Configuracion : BasePage
    {
        internal enum Locations
        {
            Row = 1,
            Col = 2
        }

        //private char DecimalSeparator = Convert.ToChar(System.Globalization.NumberFormatInfo.CurrentInfo.PercentDecimalSeparator);

        #region Events

        protected new void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);

            if (!Page.IsPostBack)
            {
                this.CargarPagina();
            }
        }

        #endregion

        #region Private Methods

        private void CargarPagina()
        {
            #region Estudio
            var estudio = new ControladorBase<Estudio>().ObtenerEntidad(x => x.Id == base.CurrentStudio.Id);
            if (estudio != null)
            {
                // Direcciones
                var direccionReal  = estudio.Direcciones.FirstOrDefault(x => x.TipoDireccion.Id == Common.WellKnownKeys.Entities.TiposDireccion.REAL.Id);
                var direccionLegal = estudio.Direcciones.FirstOrDefault(x => x.TipoDireccion.Id == Common.WellKnownKeys.Entities.TiposDireccion.LEGAL.Id);
                this.FormatearDireccion(this.txtDatos_DomicilioReal, direccionReal);
                this.FormatearDireccion(this.txtDatos_DomicilioLegal, direccionLegal);

                // Teléfonos
                var telefono = estudio.Telefonos.FirstOrDefault(x => x.TipoTelefono.Id == Common.WellKnownKeys.Entities.TiposTelefono.FIJO.Id);
                var fax = estudio.Telefonos.FirstOrDefault(x => x.TipoTelefono.Id == Common.WellKnownKeys.Entities.TiposTelefono.FAX.Id);
                this.FormatearTelefono(this.txtDatos_Telefono, telefono);
                this.FormatearTelefono(this.txtDatos_Fax, fax);

                // Email
                var emails = estudio.Emails;
                if (emails != null)
                {
                    this.txtDatos_Email.SetValue(emails.EmailEmpresa);
                    this.txtEmail_Casillas_Directores.SetValue(emails.EmailDirectores);
                    this.txtEmail_Casillas_Proveedores.SetValue(emails.EmailProveedores);
                    this.txtEmail_Casillas_Reclamos.SetValue(emails.EmailReclamos);
                }

                // Data Fiscal
                if (estudio.DataFiscal != null)
                {
                    this.txtDatos_RazonSocial.SetValue(estudio.DataFiscal.RazonSocial);
                    this.txtDatos_NroCuit.SetValue(estudio.DataFiscal.NroCuit);
                    this.txtDatos_IngresosBrutos.SetValue(estudio.DataFiscal.IngresosBrutos);
                }

                // Contacto
                var contacto = estudio.Contacto;
                if (contacto != null)
                {
                    this.txtDatos_Responsable.SetValue(contacto.Responsable);
                    this.txtDatos_Contacto.SetValue(contacto.Contacto);
                    this.txtDatos_TelefonoContacto.SetValue(contacto.TelefonoContacto);
                    this.txtDatos_CelularContacto.SetValue(contacto.CelularContacto);
                    this.txtDatos_EmailContacto.SetValue(contacto.EmailContacto);
                }
            }
            #endregion
            
            #region Costos
            var costos              = new ControladorBase<EstudioCosto>().ObtenerEntidades(x => x.Estudio.Id == base.CurrentStudio.Id);
            var costoSeries         = costos.FirstOrDefault(x => x.TipoProyecto.Id == WellKnownKeys.Entities.TiposProyecto.SERIE.Id);
            var costoVideojuegos    = costos.FirstOrDefault(x => x.TipoProyecto.Id == WellKnownKeys.Entities.TiposProyecto.VIDEOJUEGO.Id);
            if  (costoSeries != null)
            {
                txtCostos_Series_Loops.SetValue(Common.Formatter.ToFixed(costoSeries.Loops));
                txtCostos_Series_LoopMinimo.SetValue(Common.Formatter.ToFixed(costoSeries.LoopMinimo));
                txtCostos_Series_Cancion.SetValue(Common.Formatter.ToFixed(costoSeries.Cancion));
                txtCostos_Series_Coro.SetValue(Common.Formatter.ToFixed(costoSeries.Coro));
                txtCostos_Series_Palabras.SetValue(Common.Formatter.ToFixed(costoSeries.Palabras));
                txtCostos_Series_Mezcla.SetValue(Common.Formatter.ToFixed(costoSeries.Mezcla));
                txtCostos_Series_Direccion.SetValue(Common.Formatter.ToFixed(costoSeries.Direccion));
                txtCostos_Series_Traduccion.SetValue(Common.Formatter.ToFixed(costoSeries.Traduccion));
                txtCostos_Series_Adaptacion.SetValue(Common.Formatter.ToFixed(costoSeries.Adaptacion));
                txtCostos_Series_Temporizacion.SetValue(Common.Formatter.ToFixed(costoSeries.Temporizacion));
            }
            if (costoVideojuegos != null)
            {
                txtCostos_Videojuegos_Palabras.SetValue(Common.Formatter.ToFixed(costoVideojuegos.Loops));
                txtCostos_Videojuegos_Participacion.SetValue(Common.Formatter.ToFixed(costoVideojuegos.LoopMinimo));
                txtCostos_Videojuegos_Cancion.SetValue(Common.Formatter.ToFixed(costoVideojuegos.Cancion));
                txtCostos_Videojuegos_Coro.SetValue(Common.Formatter.ToFixed(costoVideojuegos.Coro));
                txtCostos_Videojuegos_Rimas.SetValue(Common.Formatter.ToFixed(costoVideojuegos.Palabras));
                txtCostos_Videojuegos_Traduccion.SetValue(Common.Formatter.ToFixed(costoVideojuegos.Traduccion));
            }
            #endregion

            #region Parámetros
            var parametros = new ControladorBase<Parametro>().ObtenerEntidad(x => x.Estudio.Id == base.CurrentStudio.Id);
            if (parametros != null)
            {
                txtEmail_Sistema_Nombre.SetValue(parametros.EmailNombre);
                txtEmail_Sistema_NombreUsuario.SetValue(parametros.EmailNombreUsuario);
                txtEmail_Sistema_Password.SetValue(parametros.EmailPassword);
                txtEmail_Sistema_SMTP.SetValue(parametros.EmailSMTP);
                txtEmail_Sistema_Puerto.SetValue(parametros.EmailPuerto);
                chkEmail_Sistema_HabilitarSSL.SetChecked(parametros.EmailHabilitarSSL);
            }
            #endregion

            #region Parámetros - Importación
            var parametrosImportacion = new ControladorBase<ParametroImportacion>().ObtenerEntidad(x => x.Estudio.Id == base.CurrentStudio.Id);
            if (parametrosImportacion != null)
            {
                this.chkImportacion_Loops_Habilitado_Palabras.SetChecked(parametrosImportacion.HabilitadoLoopsPorPalabras);
                this.chkImportacion_Loops_Habilitado_Segundos.SetChecked(parametrosImportacion.HabilitadoLoopsPorSegundos);
                this.txtImportacion_Loops_Cantidad_Palabras.SetValue(parametrosImportacion.PalabrasPorLoop);
                this.txtImportacion_Loops_Cantidad_Segundos.SetValue(parametrosImportacion.SegundosPorLoop);

                this.txtImportacion_Ubicaciones_Habilitado_Traductor.SetChecked(parametrosImportacion.HabilitadoTraductor);
                this.txtImportacion_Ubicaciones_Habilitado_Proyecto.SetChecked(parametrosImportacion.HabilitadoProyecto);
                this.txtImportacion_Ubicaciones_Habilitado_Episodio.SetChecked(parametrosImportacion.HabilitadoEpisodio);
                this.txtImportacion_Ubicaciones_Habilitado_Clave.SetChecked(parametrosImportacion.HabilitadoClave);
                this.txtImportacion_Ubicaciones_Habilitado_TituloOriginal.SetChecked(parametrosImportacion.HabilitadoTituloOriginal);
                this.txtImportacion_Ubicaciones_Habilitado_TituloTraducido.SetChecked(parametrosImportacion.HabilitadoTituloTraducido);
                this.txtImportacion_Ubicaciones_Habilitado_Duracion.SetChecked(parametrosImportacion.HabilitadoDuracion);

                this.txtImportacion_Ubicaciones_Tabla_Traductor.SetValue(parametrosImportacion.TablaTraductor);
                this.txtImportacion_Ubicaciones_Tabla_Proyecto.SetValue(parametrosImportacion.TablaProyecto);
                this.txtImportacion_Ubicaciones_Tabla_Episodio.SetValue(parametrosImportacion.TablaEpisodio);
                this.txtImportacion_Ubicaciones_Tabla_Clave.SetValue(parametrosImportacion.TablaClave);
                this.txtImportacion_Ubicaciones_Tabla_TituloOriginal.SetValue(parametrosImportacion.TablaTituloOriginal);
                this.txtImportacion_Ubicaciones_Tabla_TituloTraducido.SetValue(parametrosImportacion.TablaTituloTraducido);
                this.txtImportacion_Ubicaciones_Tabla_Duracion.SetValue(parametrosImportacion.TablaDuracion);

                this.txtImportacion_Ubicaciones_Fila_Traductor.SetValue(parametrosImportacion.FilaTraductor);
                this.txtImportacion_Ubicaciones_Fila_Proyecto.SetValue(parametrosImportacion.FilaProyecto);
                this.txtImportacion_Ubicaciones_Fila_Episodio.SetValue(parametrosImportacion.FilaEpisodio);
                this.txtImportacion_Ubicaciones_Fila_Clave.SetValue(parametrosImportacion.FilaClave);
                this.txtImportacion_Ubicaciones_Fila_TituloTraducido.SetValue(parametrosImportacion.FilaTituloTraducido);
                this.txtImportacion_Ubicaciones_Fila_TituloOriginal.SetValue(parametrosImportacion.FilaTituloOriginal);
                this.txtImportacion_Ubicaciones_Fila_Duracion.SetValue(parametrosImportacion.FilaDuracion);

                this.txtImportacion_Ubicaciones_Col_Traductor.SetValue(parametrosImportacion.ColumnaTraductor);
                this.txtImportacion_Ubicaciones_Col_Clave.SetValue(parametrosImportacion.ColumnaTraductor);
                this.txtImportacion_Ubicaciones_Col_Proyecto.SetValue(parametrosImportacion.ColumnaProyecto);
                this.txtImportacion_Ubicaciones_Col_Episodio.SetValue(parametrosImportacion.ColumnaEpisodio);
                this.txtImportacion_Ubicaciones_Col_Clave.SetValue(parametrosImportacion.ColumnaClave);
                this.txtImportacion_Ubicaciones_Col_TituloTraducido.SetValue(parametrosImportacion.ColumnaTituloOriginal);
                this.txtImportacion_Ubicaciones_Col_TituloOriginal.SetValue(parametrosImportacion.ColumnaTituloTraducido);
                this.txtImportacion_Ubicaciones_Col_Duracion.SetValue(parametrosImportacion.ColumnaDuracion);
                
                this.chkImportacion_Validaciones_TimeCodeFaltante.SetChecked(parametrosImportacion.ValidacionTimeCodeFaltante);
                this.chkImportacion_Validaciones_TimeCodeFormatoIncorrecto.SetChecked(parametrosImportacion.ValidacionTimeCodeFormatoIncorrecto);
                this.chkImportacion_Validaciones_TimeCodeSecuenciaIncorrecta.SetChecked(parametrosImportacion.ValidacionTimeCodeSecuenciaIncorrecta);
                this.chkImportacion_Validaciones_FilaVacia.SetChecked(parametrosImportacion.ValidacionFilaVacia);

                this.chkImportacion_Anotaciones_Actor.SetChecked(parametrosImportacion.HabilitadoAnotacionActor); 
                this.selImportacion_Anotaciones_Actor.SetSelected(parametrosImportacion.AnotacionActor);
                this.chkImportacion_Anotaciones_Director.SetChecked(parametrosImportacion.HabilitadoAnotacionDirector);
                this.selImportacion_Anotaciones_Director.SetSelected(parametrosImportacion.AnotacionDirector);
                this.chkImportacion_Anotaciones_TimeCodeResetHora.SetChecked(parametrosImportacion.HabilitadoAnotacionTimeCodeResetHora);
                this.txtImportacion_Anotaciones_TimeCodeResetHora.SetValue(parametrosImportacion.AnotacionTimeCodeResetHora);
            }

            #endregion
        }

        #endregion

        #region Web Methods

        /// <summary>
        /// Actualiza los valores de los Parámetros del Sistema y los Costos
        /// </summary>
        /// <param name="infoParametros"></param>
        /// <param name="infoCostos"></param>
        /// <param name="infoParametrosImportacion"></param>
        /// <returns></returns>
        [WebMethod]
        public static string actualizarParametrosYCostos(string infoParametros, string infoCostos, string infoParametrosImportacion)
        {
            var mensaje     = "Hubo un error al intentar guardar la configuración.";
            var resultado   = false;
            object valor    = null;
            try
            {
                var currentSession = Helpers.SessionHelper.GetCurrentSessionInfo();
                if (currentSession == null)
                    return SessionHelper.BuildResponse(mensaje, false, null);

                var idStudio = currentSession.Studio.Id;

                var parametroInfo               = JsonConvert.DeserializeObject<ParametroInfo>(infoParametros);
                var parametroImportacionInfo    = JsonConvert.DeserializeObject<ParametroImportacionInfo>(infoParametrosImportacion);
                var costosInfo                  = JsonConvert.DeserializeObject<EstudioCostoInfo[]>(infoCostos);

                #region Costos
                var controladorCosto        = new ControladorBase<EstudioCosto>();
                var costosInfoSerie         = costosInfo.FirstOrDefault(x => x.IdTipoProyecto == WellKnownKeys.Entities.TiposProyecto.SERIE.Id);
                var costosInfoVideojuegos   = costosInfo.FirstOrDefault(x => x.IdTipoProyecto == WellKnownKeys.Entities.TiposProyecto.VIDEOJUEGO.Id);
                var costoSerie = controladorCosto.ObtenerEntidad(x => x.Estudio.Id == idStudio && x.TipoProyecto.Id == WellKnownKeys.Entities.TiposProyecto.SERIE.Id);
                if (costoSerie != null && costosInfoSerie != null)
                {
                    #region Serie
                    costoSerie.Loops                = costosInfoSerie.Loops;
                    costoSerie.LoopMinimo           = costosInfoSerie.LoopMinimo;
                    costoSerie.Cancion              = costosInfoSerie.Cancion;
                    costoSerie.Coro                 = costosInfoSerie.Coro;
                    costoSerie.Palabras             = costosInfoSerie.Palabras;
                    costoSerie.Direccion            = costosInfoSerie.Direccion;
                    costoSerie.Adaptacion           = costosInfoSerie.Adaptacion;
                    costoSerie.Traduccion           = costosInfoSerie.Traduccion;
                    costoSerie.Mezcla               = costosInfoSerie.Mezcla;
                    costoSerie.Temporizacion        = costosInfoSerie.Temporizacion;

                    controladorCosto.GuardarEntidad(costoSerie);
                    #endregion
                }
                var costoVideojuego = controladorCosto.ObtenerEntidad(x => x.Estudio.Id == idStudio && x.TipoProyecto.Id == WellKnownKeys.Entities.TiposProyecto.VIDEOJUEGO.Id);
                if (costoVideojuego != null && costosInfoVideojuegos != null)
                {
                    #region Videojuego
                    costoVideojuego.Loops           = costosInfoVideojuegos.Loops;
                    costoVideojuego.LoopMinimo      = costosInfoVideojuegos.LoopMinimo;
                    costoVideojuego.Cancion         = costosInfoVideojuegos.Cancion;
                    costoVideojuego.Coro            = costosInfoVideojuegos.Coro;
                    costoVideojuego.Palabras        = costosInfoVideojuegos.Palabras;
                    costoVideojuego.Traduccion      = costosInfoVideojuegos.Traduccion;

                    controladorCosto.GuardarEntidad(costoVideojuego);
                    #endregion
                }
                #endregion
                
                #region Parámetros Importación
                var controladorParametroImportacion = new ControladorBase<ParametroImportacion>();
                var importacion = controladorParametroImportacion.ObtenerEntidad(x => x.Estudio.Id == idStudio);
                if (importacion != null)
                {
                    importacion.HabilitadoClave = parametroImportacionInfo.HabilitadoClave;
                    importacion.HabilitadoDuracion = parametroImportacionInfo.HabilitadoDuracion;
                    importacion.HabilitadoEpisodio = parametroImportacionInfo.HabilitadoEpisodio;
                    importacion.HabilitadoProyecto = parametroImportacionInfo.HabilitadoProyecto;
                    importacion.HabilitadoTituloOriginal = parametroImportacionInfo.HabilitadoTituloOriginal;
                    importacion.HabilitadoTituloTraducido = parametroImportacionInfo.HabilitadoTituloTraducido;
                    importacion.HabilitadoTraductor = parametroImportacionInfo.HabilitadoTraductor;

                    importacion.TablaClave = parametroImportacionInfo.TablaClave;
                    importacion.TablaDuracion = parametroImportacionInfo.TablaDuracion;
                    importacion.TablaEpisodio = parametroImportacionInfo.TablaEpisodio;
                    importacion.TablaProyecto = parametroImportacionInfo.TablaProyecto;
                    importacion.TablaTituloOriginal = parametroImportacionInfo.TablaTituloOriginal;
                    importacion.TablaTituloTraducido = parametroImportacionInfo.TablaTituloTraducido;
                    importacion.TablaTraductor = parametroImportacionInfo.TablaTraductor;

                    importacion.FilaClave = parametroImportacionInfo.FilaClave;
                    importacion.FilaDuracion = parametroImportacionInfo.FilaDuracion;
                    importacion.FilaEpisodio = parametroImportacionInfo.FilaEpisodio;
                    importacion.FilaProyecto = parametroImportacionInfo.FilaProyecto;
                    importacion.FilaTituloOriginal = parametroImportacionInfo.FilaTituloOriginal;
                    importacion.FilaTituloTraducido = parametroImportacionInfo.FilaTituloTraducido;
                    importacion.FilaTraductor = parametroImportacionInfo.FilaTraductor;

                    importacion.ColumnaClave = parametroImportacionInfo.ColumnaClave;
                    importacion.ColumnaDuracion = parametroImportacionInfo.ColumnaDuracion;
                    importacion.ColumnaEpisodio = parametroImportacionInfo.ColumnaEpisodio;
                    importacion.ColumnaProyecto = parametroImportacionInfo.ColumnaProyecto;
                    importacion.ColumnaTituloOriginal = parametroImportacionInfo.ColumnaTituloOriginal;
                    importacion.ColumnaTituloTraducido = parametroImportacionInfo.ColumnaTituloTraducido;
                    importacion.ColumnaTraductor = parametroImportacionInfo.ColumnaTraductor;

                    importacion.ValidacionTimeCodeFaltante = parametroImportacionInfo.ValidacionTimeCodeFaltante;
                    importacion.ValidacionTimeCodeFormatoIncorrecto = parametroImportacionInfo.ValidacionTimeCodeFormatoIncorrecto;
                    importacion.ValidacionTimeCodeSecuenciaIncorrecta = parametroImportacionInfo.ValidacionTimeCodeSecuenciaIncorrecta;                    
                    importacion.ValidacionFilaVacia = parametroImportacionInfo.ValidacionFilaVacia;

                    importacion.HabilitadoLoopsPorPalabras = parametroImportacionInfo.HabilitadoLoopsPorPalabras;
                    importacion.HabilitadoLoopsPorSegundos = parametroImportacionInfo.HabilitadoLoopsPorSegundos;
                    importacion.PalabrasPorLoop = parametroImportacionInfo.PalabrasPorLoop;
                    importacion.SegundosPorLoop = parametroImportacionInfo.SegundosPorLoop;

                    importacion.HabilitadoAnotacionActor = parametroImportacionInfo.HabilitadoAnotacionActor;
                    importacion.AnotacionActor = parametroImportacionInfo.AnotacionActor;
                    importacion.HabilitadoAnotacionDirector = parametroImportacionInfo.HabilitadoAnotacionDirector;
                    importacion.AnotacionDirector = parametroImportacionInfo.AnotacionDirector;
                    importacion.HabilitadoAnotacionTimeCodeResetHora = parametroImportacionInfo.HabilitadoAnotacionTimeCodeResetHora;
                    importacion.AnotacionTimeCodeResetHora = parametroImportacionInfo.AnotacionTimeCodeResetHora;

                    controladorParametroImportacion.GuardarEntidad(importacion);
                }
                #endregion

                #region Parametros
                var controladorParametro = new ControladorBase<Parametro>();
                var parametro = controladorParametro.ObtenerEntidad(x => x.Estudio.Id == idStudio);
                if (parametro != null)
                {
                    parametro.EmailNombre           = parametroInfo.EmailNombre;
                    parametro.EmailNombreUsuario    = parametroInfo.EmailNombreUsuario;
                    parametro.EmailPassword         = parametroInfo.EmailPassword;
                    parametro.EmailSMTP             = parametroInfo.EmailSMTP;
                    parametro.EmailPuerto           = parametroInfo.EmailPuerto;
                    parametro.EmailHabilitarSSL     = parametroInfo.EmailHabilitarSSL;

                    controladorParametro.GuardarEntidad(parametro);
                }
                #endregion

                #region Estudio
                var controladorEstudio = new ControladorBase<Estudio>();
                var estudio = controladorEstudio.ObtenerEntidad(x => x.Id == idStudio);
                if (estudio != null)
                {
                    // Contacto
                    estudio.Contacto.CelularContacto = parametroInfo.CelularContacto;
                    estudio.Contacto.Contacto = parametroInfo.Contacto;
                    estudio.Contacto.EmailContacto = parametroInfo.EmailContacto;
                    estudio.Contacto.Responsable = parametroInfo.Responsable;
                    estudio.Contacto.TelefonoContacto = parametroInfo.TelefonoContacto;

                    // Data Fiscal
                    estudio.DataFiscal.IngresosBrutos = parametroInfo.IngresosBrutos;
                    estudio.DataFiscal.NroCuit = parametroInfo.NroCuit;
                    estudio.DataFiscal.RazonSocial = parametroInfo.RazonSocial;

                    // Emails
                    estudio.Emails.EmailEmpresa = parametroInfo.EmailEmpresa;
                    estudio.Emails.EmailDirectores = parametroInfo.EmailDirectores;
                    estudio.Emails.EmailProveedores = parametroInfo.EmailProveedores;
                    estudio.Emails.EmailReclamos = parametroInfo.EmailReclamos;

                    // Direcciones
                    var direccionLegal = estudio.Direcciones.FirstOrDefault(x => x.TipoDireccion.Id == Common.WellKnownKeys.Entities.TiposDireccion.LEGAL.Id);
                    if (direccionLegal != null)
                    {
                        direccionLegal.Altura = parametroInfo.DomicilioLegal.Split(' ')[0];
                        direccionLegal.Calle  = parametroInfo.DomicilioLegal.Split(' ')[1];
                        //direccionLegal.Ciudad = null;
                        //direccionLegal.CodigoPostal = null;
                    }
                    var direccionReal = estudio.Direcciones.FirstOrDefault(x => x.TipoDireccion.Id == Common.WellKnownKeys.Entities.TiposDireccion.REAL.Id);
                    if (direccionReal != null)
                    {
                        direccionReal.Altura = parametroInfo.DomicilioReal.Split(' ')[0];
                        direccionReal.Calle  = parametroInfo.DomicilioReal.Split(' ')[1];
                        //direccionReal.Ciudad = null;
                        //direccionReal.CodigoPostal = null;
                    }

                    // Teléfonos
                    var telefonoFijo = estudio.Telefonos.FirstOrDefault(x => x.Id == Common.WellKnownKeys.Entities.TiposTelefono.FIJO.Id);
                    if (telefonoFijo != null)
                    {
                        //telefonoFijo.CodigoPais = null;
                        //telefonoFijo.CodigoArea = null;
                        telefonoFijo.Numero = parametroInfo.Telefono;
                    }
                    var telefonoFax = estudio.Telefonos.FirstOrDefault(x => x.Id == Common.WellKnownKeys.Entities.TiposTelefono.FAX.Id);
                    if (telefonoFax != null)
                    {
                        //telefonoFax.CodigoPais = null;
                        //telefonoFax.CodigoArea = null;
                        telefonoFax.Numero = parametroInfo.Fax;
                    }

                    controladorEstudio.GuardarEntidad(estudio);
                }
                #endregion

                mensaje = "La configuración fue guardada exitosamente.";
                resultado = true;

                // Update Session
                SessionHelper.SetCurrentSessionInfo(new SessionInfo()
                {
                    Studio = currentSession.Studio,
                    User = currentSession.User,
                    Settings = new ParametroInfo(parametro)
                });
            }
            catch (Exception ex)
            {
                LogError(ex);
                mensaje += Environment.NewLine + ex.Message;
            }
            return SessionHelper.BuildResponse(mensaje, resultado, null);
        }

        #endregion

        #region Private Methods

        private void FormatearDireccion(HtmlInputText txt, EstudioDireccion direccion)
        {
            if (direccion == null)
                return;

            txt.SetValue(String.Format("{0} {1}", direccion.Calle ?? String.Empty, direccion.Altura ?? String.Empty));
        }
        private void FormatearTelefono(HtmlInputText txt, EstudioTelefono telefono)
        {
            if (telefono == null)
                return;

            txt.SetValue(Common.Phone.ApplyFormat(telefono.Numero));
        }

        #endregion
    }

}